//
//  VistaBuscarProductos.m
//  ProyectoMoviTiendas
//
//  Created by Mario Franco on 3/29/12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#import "VistaBuscarProductos.h"
#import "MoviTiendas.h"
#import "VistaProductos.h"
#import "Comunicacion.h"



@interface VistaBuscarProductos ()
{
    MoviTiendas * principal;
    NSMutableArray * selectedIndexes;
}

@end

@implementation VistaBuscarProductos
@synthesize barBusqueda, productos;

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    principal = [MoviTiendas darInstancia];
    selectedIndexes = [[NSMutableArray alloc] init];
    productos = [[NSMutableArray alloc] init];

    // Uncomment the following line to preserve selection between presentations.
    // self.clearsSelectionOnViewWillAppear = NO;
 
    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

- (void)viewDidUnload
{
    barBusqueda = nil;
    [self setBarBusqueda:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

//Actualizar vista tan pronto se visualiza
-(void)viewWillAppear:(BOOL)animated
{
    [self.tableView reloadData];    
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Returns the number of sections.
    return 2;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    int cuantas;
    
    if (section == 0) 
    {
        if(principal.cliente.barrio == nil)
        {
            cuantas = 0;
        }
        else {
            cuantas = 2;
        }
    }
    else if (section == 1) 
    {
        cuantas = [principal.barrios count];
    }
    // Return the number of rows in the section.
    return cuantas;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (!cell)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    
    if([indexPath section] == 0)
    {
        if (indexPath.row == 0) 
        {
            cell.textLabel.text = @"Favoritas";
        }
        else 
        {
            cell.textLabel.text = principal.cliente.barrio.nombre;
        }
        
    }
    else if ([indexPath section] == 1)
    {
        
        Barrio * barrio = [principal.barrios objectAtIndex: [indexPath row]];
        if(![barrio.nombre isEqual:principal.cliente.barrio.nombre])
        {
            cell.textLabel.text = barrio.nombre;
        }
        else
        {
            cell. hidden = YES;
            
            cell.textLabel.text = @"Esto no debería aparecer";
        }
    }
    return cell;
}

/*
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return NO if you do not want the specified item to be editable.
    return YES;
}
*/

/*
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }   
    else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }   
}
*/

/*
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
}
*/

/*
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return NO if you do not want the item to be re-orderable.
    return YES;
}
*/

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell * celda = [tableView cellForRowAtIndexPath:indexPath];
    
    //Si no ha escogido el barrio
    if([celda accessoryType] == UITableViewCellAccessoryNone)
    {
        [celda setAccessoryType:UITableViewCellAccessoryCheckmark];
        
        //Si es de la sección de favoritas
        if([indexPath section] == 0)
        {
            if ([indexPath row] == 0)
            {
                [selectedIndexes addObject:principal.cliente.favoritas];
            }
            else 
            {
                [selectedIndexes addObject:principal.cliente.barrio];                
            }            
        }
        // Si es de la seccion de barrios
        else
        {
            Barrio * barrio = [principal.barrios objectAtIndex:[indexPath row]];
            [selectedIndexes addObject:barrio];
        }
    }
    // si ya había escogido el barrio
    else
    {
        [celda setAccessoryType: UITableViewCellAccessoryNone];
        
        if([indexPath section] == 0)
        {
            if ([indexPath row] == 0)
            {
                Barrio * barrio = principal.cliente.favoritas;
                BOOL encontro = NO;
                
                
                for (int i = 0; i < [selectedIndexes count] || !encontro; i++) 
                {
                    Barrio* temp = [selectedIndexes objectAtIndex:i];
                    if([temp.nombre isEqual:barrio.nombre])
                    {
                        encontro = YES;
                        [selectedIndexes removeObjectAtIndex:i];
                    }
                }
            }
            else 
            {
                Barrio * barrio = principal.cliente.barrio;
                BOOL encontro = NO;
                
                
                for (int i = 0; i < [selectedIndexes count] || !encontro; i++) 
                {
                    Barrio* temp = [selectedIndexes objectAtIndex:i];
                    if([temp.nombre isEqual:barrio.nombre])
                    {
                        encontro = YES;
                        [selectedIndexes removeObjectAtIndex:i];
                    }
                }
            }
            
        }
        else {
            Barrio * barrio = [principal.barrios objectAtIndex:[indexPath row]];
            BOOL encontro = NO;
            
            
            for (int i = 0; i < [selectedIndexes count] || !encontro; i++) 
            {
                Barrio* temp = [selectedIndexes objectAtIndex:i];
                if([temp.nombre isEqual:barrio.nombre])
                {
                    encontro = YES;
                    [selectedIndexes removeObjectAtIndex:i];
                }
            }
        }     
    }
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
{
    switch (section) 
    {
        case 0:
            return @"Favoritas";
        case 1:
            return @"Todos los barrios";
        default:
            return nil;
    }
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    
    if ([indexPath section] == 1)
    {
        // NSLog(@"Posicion del barrio es:  %d",indexPath.row);
        Barrio * barrio = [principal.barrios objectAtIndex: [indexPath row]];
        if([barrio.nombre isEqual:principal.cliente.barrio.nombre])
        {
            return 0.1;
        }
        
    }
    return 50;
    
}

//Método para esconder el teclado al presionar Cancelar
- (IBAction)esconderTeclado:(id)sender 
{
    [barBusqueda resignFirstResponder];    
}

//Método para realizar búsquedas de productos

-(void)buscarProductos:(NSString *)searchText
{ 
    [productos removeAllObjects];
    
    NSMutableArray * tiendas = [[NSMutableArray alloc]init];
    BOOL favoritasSeleccionada = [selectedIndexes containsObject:principal.cliente.favoritas];

    for (Barrio *b in selectedIndexes)
    {
        [Comunicacion cargarTiendasDeBarrio:b];
    }
    
    for (Barrio *b in selectedIndexes)
    {
        if(favoritasSeleccionada)
        {
            if (![b.nombre isEqualToString:principal.cliente.favoritas.nombre]) 
            {
                for (Tienda * tienda in b.tiendas)
                {
                    if(![principal.cliente.favoritas.tiendas containsObject:tienda])
                    {
                        [tiendas addObject:tienda];
                       
                    }
                }
            }
            else
            {
                [tiendas addObjectsFromArray:b.tiendas];
            }
            
        }
        else {
            [tiendas addObjectsFromArray:b.tiendas];
        }
            
    }
  
    for (Tienda * tien in tiendas)
    {
        NSMutableArray * itemsTienda = [Comunicacion buscarProducto: searchText EnTienda:tien];
        if(itemsTienda != nil)
        {
            [productos addObjectsFromArray:itemsTienda];
        }
        
    }
    
    //Terminar
//    productos = [Comunicacion buscarProductoEnTiendas:tiendas];
    
    /*
    for (int i=0; i< [[principal darItemsDeTiendas:tiendas] count]; i++)
    {
        Item *i1 = [[principal darItemsDeTiendas:tiendas] objectAtIndex:i];
        
        NSRange r = [i1.producto.nombre rangeOfString:searchText options:NSCaseInsensitiveSearch];
        if(r.location != NSNotFound)
        {   
            //yaEsta= NO;
            
            /*for (int i=0; i<[items count] && !yaEsta; i++)
             {
             Item *i2 = [items objectAtIndex:i];
             if([i1.producto.nombre isEqualToString:i2.producto.nombre])
             {
             yaEsta = YES;
             }
             }//
            
            //if(!yaEsta)
            //{
            [productos addObject:i1];                   
            //}            
        }
    }  */
}

-(IBAction)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{    
    [self buscarProductos:barBusqueda.text];
    [self performSegueWithIdentifier:@"buscarProductos" sender:self];
}

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    
    NSString * destino = segue.identifier; 
    
    if([destino isEqualToString:@"buscarProductos"])
    {
        /*
        VistaItems * vista = [segue destinationViewController];
        vista.items = productos;
        vista.tiendas = selectedIndexes;
         */
        
         VistaProductos * vista = [segue destinationViewController];
         vista.productos = [MoviTiendas darProductosConSoloItems: productos];
         vista.tiendas = selectedIndexes;
         
    } 
}

@end
